#include "common.h"
int oled_spi_switch = 0;
void fan_gpio_init()
{
    P5_MODE_OUT_PP(GPIO_Pin_3);
}
void uart1_gpio_init()
{
    // UART1 P30  P31  准双向
    P3_MODE_IO_PU(GPIO_Pin_0 | GPIO_Pin_1);
}

void uart2_gpio_init()
{
    // 准双向口	UART2 P10 P11
    P1_MODE_IO_PU(GPIO_Pin_0 | GPIO_Pin_1);
}
void oled_gpio_init()
{
    // 准双向
    // P10 11 13 16
    P1_MODE_IO_PU(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_6);
    // P47
    P4_MODE_IO_PU(GPIO_Pin_7);
    // P50
    P5_MODE_IO_PU(GPIO_Pin_0);
}

void uart1_config()
{
    // 配置UART1
    COMx_InitDefine COMx_InitStructure; // 结构定义
    COMx_InitStructure.UART_Mode =
        UART_8bit_BRTx; // 模式,
                        // UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
    COMx_InitStructure.UART_BRT_Use =
        BRT_Timer1;                               // 选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意:
                                                  // 串口2固定使用BRT_Timer2)
    COMx_InitStructure.UART_BaudRate  = 115200ul; // 波特率, 一般 110 ~ 115200
    COMx_InitStructure.UART_RxEnable  = ENABLE;   // 接收允许,   ENABLE或DISABLE
    COMx_InitStructure.BaudRateDouble = DISABLE;  // 波特率加倍, ENABLE或DISABLE
    UART_Configuration(
        UART1, &COMx_InitStructure); // 初始化串口1 UART1,UART2,UART3,UART4

    NVIC_UART1_Init(ENABLE,
                    Priority_1); // 中断使能, ENABLE/DISABLE; 优先级(低到高)
                                 // Priority_0,Priority_1,Priority_2,Priority_3
    UART1_SW(UART1_SW_P30_P31);
}

void uart2_config()
{
    // >>> 记得添加 NVIC.c, UART.c, UART_Isr.c <<<
    COMx_InitDefine COMx_InitStructure; // 结构定义
    // UART2 P10 P11
    COMx_InitStructure.UART_Mode =
        UART_8bit_BRTx; // 模式,
                        // UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
    COMx_InitStructure.UART_BRT_Use =
        BRT_Timer2;                               // 选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意:
                                                  // 串口2固定使用BRT_Timer2)
    COMx_InitStructure.UART_BaudRate  = 115200ul; // 波特率, 一般 110 ~ 115200
    COMx_InitStructure.UART_RxEnable  = ENABLE;   // 接收允许,   ENABLE或DISABLE
    COMx_InitStructure.BaudRateDouble = DISABLE;  // 波特率加倍, ENABLE或DISABLE
    UART_Configuration(
        UART2, &COMx_InitStructure); // 初始化串口1 UART1,UART2,UART3,UART4

    NVIC_UART2_Init(ENABLE,
                    Priority_1); // 中断使能, ENABLE/DISABLE; 优先级(低到高)
                                 // Priority_0,Priority_1,Priority_2,Priority_3
    UART2_SW(UART2_SW_P10_P11);  // 引脚选择
}

void oled_gpio_config()
{
    OLED_Init();
    OLED_ColorTurn(0);   // 0正常显示，1 反色显示
    OLED_DisplayTurn(0); // 0正常显示 1 屏幕翻转显示
}

void uart1_init()
{
    EA = 1;
    uart1_gpio_init();
    uart1_config();
}

void uart2_init()
{
    EA = 1;
    uart2_gpio_init();
    uart2_config();
}
void oled_spi_init()
{
    oled_gpio_init();
    oled_gpio_config();
}

void uart1_deal(u8 flag_value, void (*func)())
{
    u8 i;
    if (COM1.RX_TimeOut > 0) {
        // 超时计数
        if (--COM1.RX_TimeOut == 0) {
            if (COM1.RX_Cnt > 0) {
                // 这里处理收到的数据，做具体的逻辑
                for (i = 0; i < COM1.RX_Cnt; i++) {
                    if (RX1_Buffer[i] == flag_value) {
                        func();
                    }
                }
                COM1.RX_Cnt = 0;
            }
        }
    }
}

void uart2_deal(u8 flag_value, void (*func)())
{
    u8 i;
    if (COM2.RX_TimeOut > 0) {
        // 超时计数
        if (--COM2.RX_TimeOut == 0) {
            if (COM2.RX_Cnt > 0) {
                // 这里处理收到的数据，做具体的逻辑
                for (i = 0; i < COM2.RX_Cnt; i++) {
                    if (RX2_Buffer[i] == flag_value) {
                        func();
                    }
                }
                COM2.RX_Cnt = 0;
            }
        }
    }
}
